1
Introduction à PyTorch : Pourquoi les tenseurs sont importants
EvoClass-AI002Cours 1
00:00

Introduction à PyTorch : Pourquoi les tenseurs sont importants

PyTorch est un cadre open source très flexible et dynamique, apprécié pour la recherche en apprentissage profond et le prototypage rapide. Au cœur de ce système, le tenseur constitue la structure de données incontournable. Il s'agit d'un tableau multidimensionnel conçu pour traiter efficacement les opérations numériques nécessaires aux modèles d'apprentissage profond, en prenant en charge automatiquement l'accélération GPU automatically.

1. Comprendre la structure des tenseurs

Tout entrée, sortie et paramètre de modèle dans PyTorch est encapsulé dans un tenseur. Ils ont la même fonction que les tableaux NumPy, mais sont optimisés pour le traitement sur des matériels spécialisés comme les GPU, ce qui les rend bien plus efficaces pour les opérations d'algèbre linéaire à grande échelle requises par les réseaux neuronaux.

Les propriétés clés définissent le tenseur :

  • Forme: Définit les dimensions des données, exprimées sous forme de tuple (par exemple, $4 \times 32 \times 32$ pour un lot d'images).
  • Type: Spécifie le type numérique des éléments stockés (par exemple, torch.float32 pour les poids du modèle, torch.int64 pour l'indexation).
  • Appareil: Indique l'emplacement matériel physique : généralement 'cpu' ou 'cuda' (GPU NVIDIA).
Graphe dynamique et Autograd
PyTorch utilise un modèle d'exécution impératif, ce qui signifie que le graphe computationnel est construit au fur et à mesure que les opérations sont exécutées. Cela permet au moteur intégré de différenciation automatique, Autograd, de suivre chaque opération sur un tenseur, à condition que la propriété requires_grad=True soit activée, permettant un calcul facile des gradients pendant la rétropropagation.
fundamentals.py
TERMINALbash — environnement-pytorch
> Prêt. Cliquez sur « Exécuter » pour lancer.
>
INSPECTEUR DE TENSEURS En direct

Exécutez le code pour inspecter les tenseurs actifs
Question 1
Quelle commande crée un tenseur $5 \times 5$ contenant des nombres aléatoires suivant une distribution uniforme entre 0 et 1 ?
torch.rand(5, 5)
torch.random(5, 5)
torch.uniform(5, 5)
torch.randn(5, 5)
Question 2
Si le tenseur $A$ est sur le CPU, et le tenseur $B$ sur le périphérique CUDA, que se passe-t-il si vous essayez de calculer $A + B$ ?
Une erreur survient car les opérations exigent que les tenseurs soient sur le même appareil.
PyTorch déplace automatiquement $A$ vers le périphérique CUDA et poursuit.
L'opération est effectuée sur le CPU, et le résultat est renvoyé au CPU.
Question 3
Quel est le type de données (dtype) le plus courant utilisé pour les poids du modèle et les calculs intermédiaires en apprentissage profond ?
torch.float32 (virgule flottante simple précision)
torch.int64 (entier long)
torch.bool
torch.float64 (virgule flottante double précision)
Défi : Manipulation de tenseurs et forme
Préparez un tenseur pour une opération matricielle spécifique.
Vous avez un vecteur caractéristique $F$ de forme $(10,)$. Vous devez le multiplier par une matrice de poids $W$ de forme $(10, 5)$. Pour que la multiplication matricielle (MatMul) fonctionne, $F$ doit être bidimensionnel.
Étape 1
Quelle devrait être la forme de $F$ avant la multiplication avec $W$ ?
Solution :
Les dimensions internes doivent correspondre, donc $F$ doit être $(1, 10)$. Ensuite, $(1, 10) @ (10, 5) \rightarrow (1, 5)$.
Code :F_new = F.unsqueeze(0) ou F_new = F.view(1, -1)
Étape 2
Effectuez la multiplication matricielle entre $F_{new}$ et $W$ (forme $(10, 5)$).
Solution :
L'opération est une multiplication matricielle simple.
Code :output = F_new @ W ou output = torch.matmul(F_new, W)
Étape 3
Quelle méthode retourne explicitement un tenseur avec les dimensions spécifiées, vous permettant de ramener le tenseur à $(50,)$ ? (Supposons que $F$ était initialement $(5, 10)$ et est maintenant aplati.)
Solution :
Utilisez la méthode view ou reshape méthodes. La façon la plus rapide d'aplatir est souvent d'utiliser -1 pour une dimension.
Code :F_flat = F.view(-1) ou F_flat = F.reshape(50)